Nonvolatile memory devices (NVMs), such as flash memory devices, are widely used in a variety of applications such as universal serial bus (USB) drives, digital cameras, mobile phones, smart phones, tablet personal computers (PCs), memory cards, and solid state drives (SSDs). A flash memory device is typically organized into a plurality of memory blocks, pages, and memory cells, where each of the memory blocks comprises a plurality of pages, and each of the pages comprises a plurality of memory cells.
Flash Translation Layers (FTLs) embedded in flash memory devices, such as SSDs, facilitated the widespread adoption of flash memory devices by enabling host computers to communicate with flash memory devices via conventional read/write hard disk drive (HDD) interfaces. To achieve this benefit, FTLs translate commands to/from a host device or remote application by mapping the logical addresses used by host computer or remote application to the physical addresses of the data in the flash memory devices. The physical data in a flash memory device is accessible via a low level command interface to read, program (write) and erase memory locations.
Conventional HDD interfaces employed by SSDs shield flash memory device operation parameters, such as power consumption, operating temperature, and erase count, from components external to the SSD, such as applications on a host. Host applications therefore process commands which arrive without any reference to the internal operations of the SSD. For example, if an incoming write command is directed to a particular storage location that is operating at a dangerous temperature (i.e., overheating), there is currently no mechanism for processing the write command in a manner that avoids further taxing the overheating storage location.
Recent types of SSD, known as Open Channel SSDs, suffer from the same problems. These SSDs share data management responsibilities with the host computers by having some of the FTL functionality implemented in the host computer, which allows the host computer more control over the flash memory device's resources and the ability to manage multiple Open Channel SSDs using a global FTL in the host computer. The Linux 4.4 kernel is one example of an operating system kernel that supports Open Channel SSDs, which follow the NVM Express™ specification, by providing an abstraction layer called LightNVM. However, APIs for Open Channel SSDs still shield some information regarding a flash memory device operation parameters from global FTLs.
There is, therefore, an unmet demand to optimize the performance of non-volatile solid state storage devices (e.g. SSDs) by dynamically adjusting processing of incoming commands based on internal operation information of SSDs.